package kevin.framework.basic.common.user;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import kevin.framework.basic.domain.Menu;
import kevin.framework.basic.domain.User;
import kevin.framework.basic.domain.UserRole;

import org.springframework.http.HttpRequest;

/**
 * @ClassName: LoginUser
 * @Description: 封装当前登录用户的信息，角色信息存放于userData中，
 * List<UserRole> listUr = getUserData("roles")
 * @author kevin.huang
 * @date 2016年1月13日 下午8:03:39
 */
public class LoginUser implements Serializable {

	/**
	 * @Fields id : 用户id
	 */
	private String id;
	/**
	 * @Fields account : 用户账号
	 */
	private String account;
	/**
	 * @Fields userName : 用户中文名
	 */
	private String userName;
	/**
	 * @Fields userType : 用户类型
	 */
	private int userType;
	/**
	 * @Fields orgName : 用户归属的机构
	 */
	private String orgName;
	/**
	 * @Fields orgId : 用户归属机构的id
	 */
	private String orgId;
	/**
	 * @Fields orgPid : 用户父机构id
	 */

	/**
	 * @Fields sessionTime : 上次session更新时间
	 */
	private Date sessionTime;
	
	/**
	 * @Fields authMap : 用户的权限集合
	 */
	private Map<String, List<UserFunc>> authMap;

	public boolean isSuperAdmin() {
		return "0".equals(this.id);
	}
	
	public LoginUser(User user) {
		this.id = user.getId();
		this.userName = user.getUserName();
		this.account = user.getUserAccount();
		this.orgId = user.getOrgId();
		Object org = user.getExtFeildsMap().get("orgName");
		if(org != null) {
			this.orgName = String.valueOf(org);
		}
	}
	public LoginUser() {
		
	}

	private Map<String, Object> userData = new HashMap<String, Object>();

	
	public List<UserRole> getRoles() {
		Object tmp = this.getUserData("roles");
		if(tmp == null) {
			return new ArrayList<UserRole>();
		}
		return (List<UserRole> ) tmp;
	}
	
	/**
	 * 设置用户数据
	 **/
	public void setUserData(String key, Object data) {
		userData.put(key, data);
	}

	/**
	 * 获取用户数据
	 **/
	public Object getUserData(String key) {
		return userData.get(key);
	}

	/**
	 * 用户id
	 */
	public String getId() {
		return id;
	}

	/**
	 * 用户id
	 */
	public void setId(String id) {
		this.id = id;
	}

	private String loginIp;

	/**
	 * 登录ip
	 */
	public String getLoginIp() {
		return loginIp;
	}

	/**
	 * 登录ip
	 */
	public void setLoginIp(String loginIp) {
		this.loginIp = loginIp;
	}

	/**
	 * 用户账号
	 */
	public String getAccount() {
		return account;
	}

	/**
	 * 用户账号
	 */
	public void setAccount(String account) {
		this.account = account;
	}

	/**
	 * 用户中文名称
	 */
	public String getUserName() {
		return userName;
	}

	/**
	 * 用户中文名称
	 */
	public void setUserName(String userName) {
		this.userName = userName;
	}

	/**
	 * 用户类型
	 */
	public int getUserType() {
		return userType;
	}

	/**
	 * 用户类型
	 */
	public void setUserType(int userType) {
		this.userType = userType;
	}

	/**
	 * 用户归属机构
	 */
	public String getOrgName() {
		return orgName;
	}

	/**
	 * 用户归属机构
	 */
	public void setOrgName(String orgName) {
		this.orgName = orgName;
	}

	/**
	 * 用户归属机构id
	 */
	public String getOrgId() {
		return orgId;
	}

	/**
	 * 用户归属机构id
	 */
	public void setOrgId(String orgId) {
		this.orgId = orgId;
	}

	

	/**
	 * 用户session更新的时间
	 */
	public Date getSessionTime() {
		return sessionTime;
	}

	/**
	 * 用户session更新的时间
	 */
	public void setSessionTime(Date sessionTime) {
		this.sessionTime = sessionTime;
	}

	

	/**
	 * 用户权限集合
	 */
	public Map<String, List<UserFunc>> getAuthMap() {
		return authMap;
	}

	/**
	 * 用户权限集合
	 */
	public void setAuthMap(Map<String, List<UserFunc>> authMap) {
		this.authMap = authMap;
	}
	
	
	/** 语言环境 **/
	private String lang = null;

	/** 语言环境 **/
	public String getLang() {
		return lang;
	}

	/** 语言环境 **/
	public void setLang(String lang) {
		this.lang = lang;
	}

	String sessionId;
	public String getSessionId() {
		return sessionId;
	}

	public void setSessionId(String sessionId) {
		this.sessionId = sessionId;
	}

	/**
	 * 保存用户  session-key mem-key
	 * 当发生了
	 * session key 
	 * memcache key
	 * **/
	String userKey;

	public String getUserKey() {
		return userKey;
	}

	public void setUserKey(String userKey) {
		this.userKey = userKey;
	}
	
	
	
}
